package com.icss.flow.service;

import com.icss.flow.pojo.dto.DelegateTaskDTO;
import com.icss.flow.pojo.dto.FlowDTO;
import com.icss.flow.pojo.vo.HistoricActivityInstanceVO;
import com.icss.flow.pojo.vo.ProcessDefinitionVO;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;

import java.util.List;
import java.util.Map;

/**
 * @author hyk
 * {@code @Date} 2024/3/13
 */

public interface FlowService {
    /**
     * 部署流程
     *
     * @param
     */

    Boolean deployFlow(FlowDTO flowDTO);


    Boolean deployEntity(FlowDTO flowDTO);

    // 查询流程

    void selectFlowByEntityId();

    /**
     * 发起流程
     *
     * @param processKey 流程key
     * @param id
     * @param params     表单字段
     * @return
     */
    Boolean launchFlow(Integer entityCode, Integer id, Map<String, Object> params);

    // 领取任务

    void claimTask();

    // 归还任务

    void returnTask();
    /**
     * 查询待办任务列表
     * @param pageQuery
     * @return
     */

    TableDataInfo<?> queryToDoTaskList(PageQuery pageQuery);

    /**
     * 查询历史待办任务列表
     * @param pageQuery
     * @return
     */
    TableDataInfo<?> queryHistoryToDoTaskList(PageQuery pageQuery);

    // 查询任务详情
    void queryToDoTaskDetail();

    // 处理任务

    void processTasks();


    // 历史流程查询

    List<HistoricActivityInstanceVO> queryHistoryByTaskId(String taskId);

    /**
     * 根据流程key返回xml文件数据
     *
     * @param key 流程key
     * @return xml文件数据
     */
    Map<String, Object> getBpmn(String flowKey);

    Map<String, Object> getEntityBpmn(Integer entityCode);


    /**
     * 查询所有的流程信息
     *
     * @return 流程信息列表
     */
    TableDataInfo<ProcessDefinitionVO> queryFlowList(PageQuery pageQuery);


    String selectFlowByFlowId();

    Boolean delegateTask(DelegateTaskDTO delegateTaskDTO);

    Boolean taskTransfer();

    Boolean completeTask(String taskId, Map<String, Object> params);



}
